package com.lizemin.decorate.controller;

import com.lizemin.decorate.entity.Employee;
import com.lizemin.decorate.util.JSON;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author lzm
 * @date 2025/10/6 12:00
 * @description
 */
@RestController
public class EmployeeController {

    private static final Logger log = LoggerFactory.getLogger(EmployeeController.class);

    /**
     * 获取员工信息 ，演示反射型Xss攻击
     *
     * @param name 员工姓名
     * @return 员工信息
     */
    @GetMapping("/getEmployee")
    public String getEmployee(@RequestParam("name") String name) {
        log.info("员工姓名: {}", name);
        return name;
    }

    /**
     * 演示存储型Xss攻击，
     *
     * @return 数据库中的含有js脚本的员工邮箱
     */
    @GetMapping("/getEmail")
    public String getEmail() {
        return """
                <script>
                    alert("你被我攻击了，哈哈哈!");
                </script>
                """; // 请想象一下这是数据库中查出来的数据
    }

    /**
     * 演示反射型Xss攻击，获取请求头中的address参数
     *
     * @param address 请求头中的address参数
     * @return 请求头中的address参数
     */
    @GetMapping("/getAddress")
    public String getAddress(@RequestHeader("address") String address) {
        log.info("请求头address: {}", address);
        return address;
    }

    /**
     * 演示反射型Xss攻击，获取请求体中的员工信息
     *
     * @param employee 请求体中的员工信息
     * @return 请求体中的员工信息
     */
    @PostMapping("/getEmployeeInfo")
    public Employee getEmployeeInfo(@RequestBody Employee employee) {
        log.info("员工信息: {}", JSON.toJSONString(employee));
        return employee;
    }

    /**
     * 演示存储型Xss攻击，返回数据库中一个含有js脚本的响应体
     *
     * @param response HttpServletResponse对象
     * @throws IOException 可能抛出的IOException异常
     */
    @GetMapping("/hello")
    public void hello(HttpServletResponse response) throws IOException {
        PrintWriter writer = response.getWriter();
        String script = """ 
                <script>
                    alert("你被迷人的我攻击了，哈哈哈!");
                </script>
                """; // 请把这想象成这是数据库中查出来的数据
        writer.println(script);
    }

}
